package com.learning.lesson03partition;

/**
 * 分治法实践-汉诺塔问题
 *
 * @author Zongheng Ma
 * @date 2020/11/12
 */
public class HanoiTower {

    public static void main(String[] args) {
        int num = 5;
        hanoiMoveHandler(num, 'A', 'B', 'C');
    }


    /**
     * 汉诺塔移动方法
     *
     * @param num 需要移动的盘子数量
     * @param a   移动起始塔
     * @param b   使用的中间塔
     * @param c   移动目的塔
     */
    public static void hanoiMoveHandler(int num, char a, char b, char c) {
        if (num == 1) {
            // 只需要移动一个盘，A移到C
            System.out.printf("第1个盘 %s -> %s\n", a, c);
        } else {
            // 1.先将上面的盘由A移到B
            hanoiMoveHandler(num - 1, a, c, b);
            // 2.最底部的盘由A移到C
            System.out.printf("第%s个盘 %s -> %s\n", num, a, c);
            // 3.上面的盘由B移到C
            hanoiMoveHandler(num - 1, b, a, c);
        }
    }
}
